﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category0
{
  public class MT028 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagDefinition U0002;
    private static SwiftTagSubItemDefinition U0003;
    private static SwiftTagDefinition U0004;
    private static SwiftTagSubItemDefinition U0005;
    private static SwiftTagDefinition U0006;
    private static SwiftTagSubItemDefinition U0007;
    private static SwiftTagSubItemDefinition U0008;
    private static SwiftTagDefinition U000E;
    private static SwiftTagSubItemDefinition U000F;
    private static SwiftTagSubItemDefinition U0010;

    [Description("FIN Copy Service Code.")]
    public Tag103 ServiceCode_103
    {
      get
      {
        return new Tag103((SwiftElement) this, 0, (SwiftDefinitionElement) MT028.U0002);
      }
    }

    [Description("FIN Copy Service Code.")]
    public Tag103 Tag103_ServiceCode
    {
      get
      {
        return this.ServiceCode_103;
      }
    }

    [Description("Type of Hold Queue report,")]
    public Tag243 HoldQueueRequestType_243
    {
      get
      {
        return new Tag243((SwiftElement) this, 0, (SwiftDefinitionElement) MT028.U0004);
      }
    }

    [Description("Type of Hold Queue report,")]
    public Tag243 Tag243_HoldQueueRequestType
    {
      get
      {
        return this.HoldQueueRequestType_243;
      }
    }

    [Description("Start date and time")]
    public Tag177 StartDateTime_177
    {
      get
      {
        return new Tag177((SwiftElement) this, 0, (SwiftDefinitionElement) MT028.U0006);
      }
    }

    [Description("Start date and time")]
    public Tag177 Tag177_StartDateTime
    {
      get
      {
        return this.StartDateTime_177;
      }
    }

    [Description("End Date and Time")]
    public Tag177 EndDateTime_177
    {
      get
      {
        return new Tag177((SwiftElement) this, 0, (SwiftDefinitionElement) MT028.U000E);
      }
    }

    [Description("End Date and Time")]
    public Tag177 Tag177_EndDateTime
    {
      get
      {
        return this.EndDateTime_177;
      }
    }

    public MT028()
      : base(true)
    {
    }

    public MT028(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT028.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT028.MessageDefinition = new SwiftMessageDefinition("MT028", "FIN Copy Message Status Request");
      MT028.U0002 = new SwiftTagDefinition("ServiceCode_103", "FIN Copy Service Code.");
      MT028.U0002.TagName = "{103:";
      MT028.U0003 = new SwiftTagSubItemDefinition("ServiceCode", "service-code");
      MT028.U0002.Elements.Add((SwiftDefinitionElement) MT028.U0003);
      MT028.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT028.U0002);
      MT028.U0004 = new SwiftTagDefinition("HoldQueueRequestType_243", "Type of Hold Queue report,");
      MT028.U0004.TagName = "{243:";
      MT028.U0005 = new SwiftTagSubItemDefinition("HoldQueueRequestType", "Hold Queue Request Type");
      MT028.U0004.Elements.Add((SwiftDefinitionElement) MT028.U0005);
      MT028.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT028.U0004);
      MT028.U0006 = new SwiftTagDefinition("StartDateTime_177", "Start date and time");
      MT028.U0006.TagName = "{177:";
      MT028.U0006.Mandatory = false;
      MT028.U0007 = new SwiftTagSubItemDefinition("Date", "Date");
      MT028.U0006.Elements.Add((SwiftDefinitionElement) MT028.U0007);
      MT028.U0008 = new SwiftTagSubItemDefinition("Time", "Time");
      MT028.U0006.Elements.Add((SwiftDefinitionElement) MT028.U0008);
      MT028.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT028.U0006);
      MT028.U000E = new SwiftTagDefinition("EndDateTime_177", "End Date and Time");
      MT028.U000E.TagName = "{177:";
      MT028.U000E.Mandatory = false;
      MT028.U000F = new SwiftTagSubItemDefinition("Date", "Date");
      MT028.U000E.Elements.Add((SwiftDefinitionElement) MT028.U000F);
      MT028.U0010 = new SwiftTagSubItemDefinition("Time", "Time");
      MT028.U000E.Elements.Add((SwiftDefinitionElement) MT028.U0010);
      MT028.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT028.U000E);
    }
  }
}
